package org.ix.gateway.route.presentation.condition;

import org.ix.common.models.SelectCondition;

import java.time.LocalDateTime;
import java.util.Collection;

import lombok.Getter;
import lombok.Setter;
import lombok.ToString;

/**
 * 网关路由查询条件
 *
 * @author 郗世豪（rarexixi@sina.com）
 */
@Getter
@Setter
@ToString
public class GatewayRouteSelectCondition extends SelectCondition {

    /**
     * 路由id
     */
    private String id;

    /**
     * 路由id列表
     */
    private Collection<String> idIn;

    /**
     * 排除的路由id列表
     */
    private Collection<String> idNotIn;

    /**
     * 路由id不为空
     */
    private Boolean idIsNotEmpty;

    /**
     * 路由id为空
     */
    private Boolean idIsEmpty;

    /**
     * 路由id开始
     */
    private String idStartWith;

    /**
     * 路由id结束
     */
    private String idEndWith;

    /**
     * 路由id包含
     */
    private String idContains;

    /**
     * 转发目标uri
     */
    private String uri;

    /**
     * 转发目标uri列表
     */
    private Collection<String> uriIn;

    /**
     * 排除的转发目标uri列表
     */
    private Collection<String> uriNotIn;

    /**
     * 转发目标uri不为空
     */
    private Boolean uriIsNotEmpty;

    /**
     * 转发目标uri为空
     */
    private Boolean uriIsEmpty;

    /**
     * 转发目标uri开始
     */
    private String uriStartWith;

    /**
     * 转发目标uri结束
     */
    private String uriEndWith;

    /**
     * 转发目标uri包含
     */
    private String uriContains;

    /**
     * 断言集合JSON
     */
    private String predicates;

    /**
     * 断言集合JSON列表
     */
    private Collection<String> predicatesIn;

    /**
     * 排除的断言集合JSON列表
     */
    private Collection<String> predicatesNotIn;

    /**
     * 断言集合JSON不为空
     */
    private Boolean predicatesIsNotEmpty;

    /**
     * 断言集合JSON为空
     */
    private Boolean predicatesIsEmpty;

    /**
     * 断言集合JSON开始
     */
    private String predicatesStartWith;

    /**
     * 断言集合JSON结束
     */
    private String predicatesEndWith;

    /**
     * 断言集合JSON包含
     */
    private String predicatesContains;

    /**
     * 过滤器集合JSON
     */
    private String filters;

    /**
     * 过滤器集合JSON列表
     */
    private Collection<String> filtersIn;

    /**
     * 排除的过滤器集合JSON列表
     */
    private Collection<String> filtersNotIn;

    /**
     * 过滤器集合JSON不为空
     */
    private Boolean filtersIsNotEmpty;

    /**
     * 过滤器集合JSON为空
     */
    private Boolean filtersIsEmpty;

    /**
     * 过滤器集合JSON开始
     */
    private String filtersStartWith;

    /**
     * 过滤器集合JSON结束
     */
    private String filtersEndWith;

    /**
     * 过滤器集合JSON包含
     */
    private String filtersContains;

    /**
     * Metadata
     */
    private String metadata;

    /**
     * Metadata列表
     */
    private Collection<String> metadataIn;

    /**
     * 排除的Metadata列表
     */
    private Collection<String> metadataNotIn;

    /**
     * Metadata不为空
     */
    private Boolean metadataIsNotEmpty;

    /**
     * Metadata为空
     */
    private Boolean metadataIsEmpty;

    /**
     * Metadata开始
     */
    private String metadataStartWith;

    /**
     * Metadata结束
     */
    private String metadataEndWith;

    /**
     * Metadata包含
     */
    private String metadataContains;

    /**
     * 路由执行顺序
     */
    private Integer routeOrder;

    /**
     * 路由执行顺序列表
     */
    private Collection<Integer> routeOrderIn;

    /**
     * 排除的路由执行顺序列表
     */
    private Collection<Integer> routeOrderNotIn;

    /**
     * 最小路由执行顺序
     */
    private Integer routeOrderMin;

    /**
     * 最大路由执行顺序
     */
    private Integer routeOrderMax;

    /**
     * 是否删除
     */
    private Integer deleted;

    /**
     * 创建人
     */
    private Integer createUser;

    /**
     * 创建人列表
     */
    private Collection<Integer> createUserIn;

    /**
     * 排除的创建人列表
     */
    private Collection<Integer> createUserNotIn;

    /**
     * 最小创建人
     */
    private Integer createUserMin;

    /**
     * 最大创建人
     */
    private Integer createUserMax;

    /**
     * 修改人
     */
    private Integer updateUser;

    /**
     * 修改人列表
     */
    private Collection<Integer> updateUserIn;

    /**
     * 排除的修改人列表
     */
    private Collection<Integer> updateUserNotIn;

    /**
     * 最小修改人
     */
    private Integer updateUserMin;

    /**
     * 最大修改人
     */
    private Integer updateUserMax;

    /**
     * 最小创建时间
     */
    private LocalDateTime createTimeMin;

    /**
     * 最大创建时间
     */
    private LocalDateTime createTimeMax;

    /**
     * 最小更新时间
     */
    private LocalDateTime updateTimeMin;

    /**
     * 最大更新时间
     */
    private LocalDateTime updateTimeMax;
}
